
/**
 * @file Tools.h
 * @brief 一些工具函数
 */
#pragma once

#include "DataStructure/Common/Out.h"
#include "DataStructure/Common/Status.h"
#include "DataStructure/Input/Solver/Project.h"

/** @brief 运行程序的命令参数格式的格式*/
void help ();

/** @brief 解析命令行，获得项目有关参数
 * @param argc 命令个数
 * @param argv 命令参数, 输入参数必须以键值对的形式输入
 * @param [out] project 返回值， 设计的工程属性
 * @return 返回执行状态
 */
SG::DataStructure::Common::Status parserCommond (int argc, char** argv, SG::DataStructure::FEM::Project _OUT& project);

/**  @brief 打印软件启动提示
 *
 * @param input 输入文件名称
 */
void printSubmitPrompt (const std::string& input);

/**  @brief 打印完成计算提示
 *
 * @param input 输入文件名称
 */
void printEndPrompt (const std::string& job);

/// @brief 是否存在路径
/// @param path
/// @return
bool isPathValidAndExists (const std::string& path);

/// @brief 创建文件夹
/// @param path
/// @return
bool createDirectory (const std::string& path);

/// @brief 递归创建文件夹
/// @param path
/// @return
bool createDirectories (std::string& path);

// 分解路径为目录路径和文件名
void splitPath (const std::string& fullPath, std::string& _OUT directoryPath, std::string& _OUT fileName);

/// @brief 检测CPU厂商并在AMD平台上显示Intel MKL兼容性警告
/// @return 如果是AMD CPU返回true，否则返回false
bool checkCpuAndWarnIfAmd();

#ifdef _WIN32
#include <windows.h>
// 文件选择对话框
std::string OpenFileDialog ();
#endif